package com.millstein.tsinglog.service;

import com.millstein.tsinglog.model.dto.comment.BatchCommentCheckDTO;
import com.millstein.tsinglog.model.dto.comment.CommentCheckDTO;
import com.millstein.tsinglog.model.dto.comment.CommentSaveDTO;
import com.millstein.tsinglog.model.pojo.Comment;
import com.millstein.tsinglog.model.vo.biz.CommentVo;
import com.millstein.tsinglog.model.vo.result.PageDetail;
import com.millstein.tsinglog.model.vo.result.PageResult;

import java.util.List;

public interface CommentService {
    /**
     * 条件及分页查询评论信息
     * @param currentPage 当前页
     * @param pageSize 每页的数据量
     * @param ip 评论者的ip地址
     * @param keyword 关键字
     * @param commentStatus 评论的审核状态
     * @return
     */
    PageResult<CommentVo> getCommentByPage(Integer currentPage,
                                           Integer pageSize,
                                           String ip,
                                           String keyword,
                                           Short commentStatus);

    /**
     * 审核评论
     * @param commentCheckDTO 评论的信息
     * @param uid 审核用户的id
     */
    void checkComment(CommentCheckDTO commentCheckDTO, Long uid);

    /**
     * 根据id查询评论
     * @param id 评论的id
     * @return
     */
    CommentVo getCommentById(Long id);

    /**
     * 修改审核信息
     * @param commentCheckDTO 修改的信息
     * @param uid 审核用户的id
     */
    void modifyCheck(CommentCheckDTO commentCheckDTO, Long uid);

    /**
     * 批量审核信息
     * @param batchCommentCheckDTO 审核的信息
     * @param uid 审核用户的id
     */
    void batchCheckComment(BatchCommentCheckDTO batchCommentCheckDTO, Long uid);

    /**
     * 批量删除评论
     * @param ids 评论id集合
     */
    void deleteByIds(List<Long> ids);

    /**
     * 为文章详情页提供评论信息
     * @param aid 文章id
     * @param currentPage 当前页
     * @return
     */
    PageDetail<CommentVo> getCommentByAidForPortal(Long aid, Integer currentPage);

    /**
     * 支持评论
     * @param cid 评论id
     * @param aid 文章id
     * @param type 操作类型，1为支持，2为反对
     * @return 支持后该评论的支持数量
     */
    Integer doWithComment(Long cid, Long aid, Short type);

    /**
     * 保存评论（非管理员）
     * @param commentSaveDTO 评论信息
     */
    void saveComment(CommentSaveDTO commentSaveDTO);
}
